import BigNumber from 'bignumber.js'

/**
 * 数值大小比较
 *
 * @param arg1
 * @param arg2
 */
export function compareNumber(arg1, arg2) {
  const a1 = new BigNumber(arg1)
  const a = a1.minus(arg2)
  if (a.isZero()) {
    return 0
  } else if (a.isNegative()) {
    return -1
  } else {
    return 1
  }
}

/**
 * 设置有效小数点位数,四舍五入
 *
 * @param arg1
 * @param scale
 *            小数点有效位数
 */
export function setScale(arg1, scale) {
  if (arg1 && scale) {
    const a1 = new BigNumber(arg1)
    return a1.toFixed(scale, BigNumber.ROUND_HALF_UP)
  } else {
    return arg1
  }
}

/**
 * 金额精确乘法计算
 *
 * @param arg1
 * @param arg2
 * @param scale
 *            有效小数点位数
 * @return 乘法计算结果
 */
export function accMul(arg1, arg2, scale) {
  const a1 = new BigNumber(arg1)
  const a2 = new BigNumber(arg2)
  if (scale) {
    return a1.times(a2).toFixed(scale, BigNumber.ROUND_HALF_UP)
  } else {
    return a1.times(a2).toFixed()
  }
}

/**
 * 金额精确累加计算
 *
 * @param arg1
 * @param arg2
 * @return 加法计算结果
 */
export function accAdd(arg1, arg2) {
  const a1 = new BigNumber(arg1)
  const a2 = new BigNumber(arg2)
  return a1.plus(a2).toFixed()
}

/**
 * 金额精确减法计算
 *
 * @param arg1
 *            被减数
 * @param arg2
 *            减数
 * @return 减法计算结果
 */
export function accSub(arg1, arg2) {
  const a1 = new BigNumber(arg1)
  const a2 = new BigNumber(arg2)
  return a1.minus(a2).toFixed()
}

/**
 * 金额精确除法计算
 *
 * @param arg1
 *            被除数
 * @param arg2
 *            除数
 * @param scale
 *            有效小数点位数
 * @return 除法计算结果
 */
export function accDiv(arg1, arg2, scale) {
  const a1 = new BigNumber(arg1)
  const a2 = new BigNumber(arg2)
  if (scale) {
    return a1.dividedBy(a2).toFixed(scale, BigNumber.ROUND_HALF_UP)
  } else {
    return a1.dividedBy(a2).toFixed()
  }
}

/**
 * 向下取整
 * @param {*} arg1
 */
export function floor(arg1) {
  const a1 = new BigNumber(arg1)
  return a1.toFixed(0, BigNumber.ROUND_FLOOR)
}

/**
 * 向上取整
 * @param {*} arg1
 */
export function cell(arg1) {
  const a1 = new BigNumber(arg1)
  return a1.toFixed(0, BigNumber.ROUND_CEIL)
}

/**
 * 经纬度判读是否是数字
 */
export function isDecimal(rule, value, callback) {
  if (!value) {
    return
  }
  setTimeout(() => {
    if (!Number(value)) {
      undefined
      callback(new Error('请输入正确的数字'))
    }
  }, 100)
}
